﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using DevExpress.XtraEditors;
using Computer_Manager.DTO;
using Computer_Manager.DAL;
using Computer_Manager.BUS;
using System.Security.Cryptography;

namespace Computer_Manager.GUI
{
    public partial class frmAddUser : DevExpress.XtraEditors.XtraForm
    {
        frmUser frmUser = (frmUser)Application.OpenForms["frmUser"];
        BUS_roles bus_role = new BUS_roles();
        DTO_user user = null;
        BUS_user bus_User = new BUS_user();
        private bool edit = false;
        private string oldpass = "";
        public int id_user { get; set; }
        public frmAddUser()
        {

            InitializeComponent();
            
        }
        
        private void frmAddUser_Load(object sender, EventArgs e)
        {
            user = new DTO_user();
            user.id_user = id_user;
            var dtu = bus_User.GetByID(user);
            DataTable dt = bus_role.GetAll();
            cmbRoles.DataSource = dt;
            cmbRoles.DisplayMember = "role_name";
            cmbRoles.ValueMember = "role_id";
            ceChangePass.Visible = false;
            if (dtu.Rows.Count > 0)
            {
                this.Text = "Sửa thông tin người dùng";
                txtUsername.Text = dtu.Rows[0]["username"].ToString();
                txtFullname.Text = dtu.Rows[0]["fullname"].ToString();
                txtPass.Enabled = false;
                txtRepass.Enabled = false;
                ceChangePass.Visible = true;
                if (bool.Parse(dtu.Rows[0]["gender"].ToString()))
                {
                    rdgGender.SelectedIndex = 1;    
                }
                oldpass = dtu.Rows[0]["password"].ToString();
                //txtRepass.Text = dtu.Rows[0]["password"].ToString();
                cmbRoles.SelectedValue = int.Parse(dtu.Rows[0]["role_id"].ToString());
                edit = true;
            }
            
        }

        private void btnExit_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void btnSave_Click(object sender, EventArgs e)
        {
            
            string Username = txtUsername.Text.ToString().Trim();
            string Pass = txtPass.Text.ToString().Trim();
            
            if (Username == "")
            {
                XtraMessageBox.Show("Tên người dùng không được trống.", "Thông tin", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                //MessageBox.Show("Tên người dùng không được trống.","Thông tin",MessageBoxButtons.OK,MessageBoxIcon.Warning);
                txtUsername.Focus();


            }
            else
            {
                if (edit)
                {
                    user = new DTO_user();
                    user.id_user = id_user;
                    user.username = Username;
                    if (ceChangePass.Checked)
                    {
                        if (Pass == "")
                        {
                            XtraMessageBox.Show("Mật khẩu không được trống.", "Thông tin", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                            txtPass.Focus();
                            return;
                        }
                        else if (Pass == txtRepass.Text.ToString().Trim())
                        {
                            user.password = MD5(Pass);
                        }
                        else
                        {
                            XtraMessageBox.Show("Mật khẩu và xác nhận mật khẩu không đúng.", "Thông tin", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                            txtRepass.Focus();
                            return;
                        }
                        
                    }
                    else
                    {
                        user.password = oldpass;
                    }
                    
                    user.fullname = txtFullname.Text;
                    user.gender = bool.Parse(rdgGender.Properties.Items[rdgGender.SelectedIndex].Value.ToString());
                    user.role_id = int.Parse(cmbRoles.SelectedValue.ToString());
                    var checkUser = bus_User.GetByUserName(user);
                    int checkId = 0;
                    try
                    {
                        checkId = int.Parse(checkUser.Rows[0]["id_user"].ToString());
                    }
                    catch (Exception) { }
                    
                    if (checkUser.Rows.Count > 0 && checkId !=id_user)
                    {
                        
                         XtraMessageBox.Show("Tên người dùng đã tồn tại.", "Thông tin", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                         txtUsername.Focus();
                         return;
                        
                    }
                    else
                    {
                        //MessageBox.Show(rdgGender.Properties.Items[rdgGender.SelectedIndex].Value.ToString());
                        if (bus_User.user_Update(user))
                        {
                            XtraMessageBox.Show("Thay đổi thông tin người dùng thành công.", "Thông tin", MessageBoxButtons.OK, MessageBoxIcon.Information);
                            this.Close();
                            frmUser.loadData();
                        }
                        else
                        {
                            return;
                        }
                        

                        
                    }
                }
                else
                {
                    if (Pass == "")
                    {
                        XtraMessageBox.Show("Mật khẩu không được trống.", "Thông tin", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                        txtPass.Focus();
                    }
                    else
                    {

                        if (Pass == txtRepass.Text.ToString().Trim())
                        {
                            user = new DTO_user();
                            user.username = Username;
                            user.password = MD5(Pass);
                            user.fullname = txtFullname.Text;
                            user.gender = bool.Parse(rdgGender.Properties.Items[rdgGender.SelectedIndex].Value.ToString());
                            user.role_id = int.Parse(cmbRoles.SelectedValue.ToString());
                            var checkUser = bus_User.GetByUserName(user);

                            if (checkUser.Rows.Count > 0)
                            {
                                XtraMessageBox.Show("Tên người dùng đã tồn tại.", "Thông tin", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                                txtUsername.Focus();
                            }
                            else
                            {
                                //MessageBox.Show(rdgGender.Properties.Items[rdgGender.SelectedIndex].Value.ToString());
                                if (bus_User.user_insert(user))
                                {
                                    XtraMessageBox.Show("Thêm người dùng thành công.", "Thông tin", MessageBoxButtons.OK, MessageBoxIcon.Information);
                                    this.Close();

                                    frmUser.loadData();
                                }
                                else
                                {
                                    return;
                                }
                            }
                        }
                        else
                        {
                            XtraMessageBox.Show("Mật khẩu và xác nhận mật khẩu không đúng.", "Thông tin", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                            txtRepass.Focus();
                        }
                    }

                }
            }
        }
        //Hàm mã hoá MD5
        public static string MD5(string x)
        {
            MD5 md5 = new MD5CryptoServiceProvider();

            //compute hash from the bytes of text
            md5.ComputeHash(ASCIIEncoding.ASCII.GetBytes(x));

            //get hash result after compute it
            byte[] result = md5.Hash;

            StringBuilder strBuilder = new StringBuilder();
            for (int i = 0; i < result.Length; i++)
            {
                //change it into 2 hexadecimal digits
                //for each byte
                strBuilder.Append(result[i].ToString("x2"));
            }

            return strBuilder.ToString();
        }

        private void ceChangePass_CheckedChanged(object sender, EventArgs e)
        {
            if (ceChangePass.Checked)
            {
                txtPass.Enabled = true;
                txtRepass.Enabled = true;
            }
            else
            {
                txtPass.Enabled = false;
                txtRepass.Enabled = false;
            }
        }
    }
}